/**
 *
 * @param {*} type 接收一个action类型的字符串作为参数
 *
 * @param {*} prepareAction 是一个函数 会对 actionCreator 返回类型 进行改写
 *
 * @returns 返回一个使用该类型字符串的 actionCreator 函数
 */
function createAction(type, prepareAction) {
  function actionCreator(payload) {
    if (prepareAction) {
      const preparedAction = prepareAction.call(null, payload);
      return {
        type,
        ...preparedAction,
      };
    }
    return {
      type,
      payload,
    };
  }

  // 函数 改写  toString 方法，用于获取类型
  actionCreator.toString = () => type;

  // 函数 增加 type 属性，用于获取类型
  actionCreator.type = type;
  return actionCreator;
}
export default createAction;
